package com.edu.d2_polymorphic_average;


/**
 * 多态的好处
 * 在多态状态下，右边对象便于实现解耦，便于维护
 * 在定义方法中，如果父类作为参数传递进去了，该方法可以接收一切子类对象，体现多态的便利性和扩展性
 *注意：多态状态下，不能够使用子类的独有方法，除非使用强转
 */
public class Test {
    public static void main(String[] args) {
        Animal dog= new Dog();
        //右边的对象，随时可以更换，实现解耦
        Animal Cat=new Cat();
        //会优先运行出右边子类中的方法
        dog.run();
        //会输出左边父类的变量，假如父类中没有这个变量，会报错
        System.out.println(dog.name);
        //在定义方法中，如果父类作为参数传递进去了，该方法可以接收一切子类对象，体现多态的便利性和扩展性
        go(dog);
        go(Cat);
        //cat.swimming();报错，必须使用强转
        //就是动物类型的转猫咪类型的，大的往小的转，必须要使用强转
        Cat cat=(Cat)Cat;
        cat.swimming();
        //但有一点，强制转换类型，编译阶段不会报错（注意：有继承实现关系的，实现强转，没有毛病），但强转错误的运行阶段会报错，比如强制把猫类型转成狗
        //  ---------例如这样：Dog dog1=(Dog)Cat;
    }
    public static void go(Animal a){
        System.out.println("开始");
        a.run();
        System.out.println("结束");
    }
}
